PaintsChainerをAmazon EC2で動かしてみた
ども、大瀧です。
PaintsChainerはディープラーニング技術であるニューラルネットワークのフレームワークChainerを利用した、線画像を着色するWebサービスです。ソース自体は公開されているので、NVIDIA製GPUを搭載した自前のマシンで手軽に試すことができます。
今回は、NVIDIA Tesla K80 GPUが使えるAmazon EC2 P2インスタンスのDockerコンテナ上で実行してみました。
動作確認環境
- AWSリージョン : オレゴン
- EC2インスタンスタイプ : p2.xlarge
- AMI : amzn-ami-hvm-2016.09.1.20170119-x86_64-gp2 (ami-f173cc91)
- Docker バージョン : 1.12.6
- NVIDIA Driver バージョン : 375.26
1. ドライバとDockerのインストール
まずは、EC2からGPUを利用するためのNVIDIA Driverをインストールします。
ドライバのダウンロードページからx86_64向け最新バージョンのインストーラのリンクを確認し、EC2からwget
コマンドでダウンロード、インストーラを実行します。内部でドライバのビルドが走るため、あらかじめgccなどの開発ツールをインストールしておきましょう。
$ sudo yum groupinstall -y "Development Tools" $ wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.26/NVIDIA-Linux-x86_64-375.26.run $ chmod +x NVIDIA-Linux-x86_64-375.26.run $ sudo ./NVIDIA-Linux-x86_64-375.26.run (端末のウィザードに従って操作) $
Dockerもインストールしておきます。
$ sudo yum install -y docker $ sudo service docker start
DockerからNVIDIA Driverを利用する方法はいくつかあるようですが、今回は手軽に試すことのできるNVIDIA Dockerを利用します。READMEのQuick Startに従い、nvidia-docker
コマンドをインストールします。
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0/nvidia-docker_1.0.0_amd64.tar.xz $ sudo tar --strip-components=1 -C /usr/bin -xvf /tmp/nvidia-docker*.tar.xz && rm /tmp/nvidia-docker*.tar.xz $ sudo -b nohup nvidia-docker-plugin > /tmp/nvidia-docker.log
nvidia/cuda
コンテナに含まれ、GPUの使用状況を表示するnvidia-smi
コマンドで動作確認してみます。
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi Using default tag: latest latest: Pulling from nvidia/cuda 8aec416115fd: Pull complete 695f074e24e3: Pull complete 946d6c48c2a7: Pull complete bc7277e579f0: Pull complete 2508cbcde94b: Pull complete d5b3e99be78e: Pull complete e1529bc8530d: Pull complete b897e7b9b2c4: Pull complete 26139eb8a024: Pull complete 1a30613688a9: Pull complete Digest: sha256:70eaf7c73a95cc3d29e73d73e470d8e44a3d6d6f639968ab86a1584cbb1d9fad Status: Downloaded newer image for nvidia/cuda:latest Thu Feb 2 05:30:03 2017 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.26 Driver Version: 375.26 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 | | N/A 28C P8 29W / 149W | 0MiB / 11439MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ $
Tesla K80がきちんと認識されていることがわかりますね。DockerからGPUにアクセスできることを確認できました。
2. PaintsChainerの実行
PaintsChainerのGitHubページで紹介されている、非公式のDockerイメージliamjones/paintschainer-dockerを利用してみます。コンテナの実行はシンプルで、ポートバインドを指定すればOKです。今回は80番ポートにしました。
$ sudo nvidia-docker run -d -p 80:8000 liamjones/paintschainer-docker Using default tag: latest latest: Pulling from liamjones/paintschainer-docker 8aec416115fd: Already exists 695f074e24e3: Already exists 946d6c48c2a7: Already exists bc7277e579f0: Already exists 2508cbcde94b: Already exists d5b3e99be78e: Already exists e1529bc8530d: Already exists b897e7b9b2c4: Already exists 26139eb8a024: Already exists 1a30613688a9: Already exists a673c64a1d72: Pull complete 6fa5e57a6535: Pull complete fd671dce7f19: Pull complete ad65100ed1af: Pull complete 0b9380920d3f: Pull complete 1e343c17d15d: Pull complete 821f43587c58: Pull complete 0ff90f8450b7: Pull complete Digest: sha256:9ad2b5af060eef2242cdc76c452d1afc8429dc0ebdb5f398a3eb3c9fc77f2e10 Status: Downloaded newer image for liamjones/paintschainer-docker:latest faf60c16121ce4682f4ca3cabdc14487b0cce3f92b3f3571f165a2f03c584479 $
WebブラウザでEC2のグローバルIPにアクセスしてみると。。。
PaintsChainerの画面が表示されました。Set sketchから線画をアップロードし、[Colorize]をクリックすると。。。
めそ子さんが着色されました!
端末側で以下のようにnvidia-smi
コマンドを実行すると、GPUが使用される様子を確認することもできます。
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi -l 10 Thu Feb 2 06:02:38 2017 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.26 Driver Version: 375.26 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 | | N/A 37C P0 68W / 149W | 903MiB / 11439MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+ Thu Feb 2 06:02:48 2017 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.26 Driver Version: 375.26 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 | | N/A 37C P0 96W / 149W | 903MiB / 11439MiB | 73% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+ :
まとめ
PaintsChainerをGPUを搭載するEC2のP2インスタンスで実行する様子をご紹介しました。ディープラーニングは用途やその凄さが実感しずらい技術だと思いますが、画像解析のようなわかりやすいユースケースが示され、しかもハードウェアを購入することなくクラウドで手軽に試せるのは素晴らしいですね。